package com.qrxl.util;

import java.lang.reflect.Method;
import java.util.Objects;

/**
 * 枚举工具类
 *
 * @author LiuYing
 * @version 1.0
 * @date 20/12/15 下午 12:44
 */
public class EnumUtil {

    private EnumUtil() { }

    /**
     * 查找code对应的枚举
     * @param enumClazz
     * @param code
     * @param <T>
     * @return
     */
    public static <T> T findEnum(Class<T> enumClazz, Integer code) {
        if (code == null || enumClazz == null) {
            return null;
        }
        try {
            Method valuesFun = enumClazz.getMethod("values");
            T[] enumItemArr = (T[])valuesFun.invoke(enumClazz,null);
            for (T enumItem : enumItemArr) {
                Method codeFun = enumItem.getClass().getMethod("getCode");
                Object codeObj = codeFun.invoke(enumItem, null);
                if (Objects.equals(codeObj, code)) {
                    return enumItem;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 查找code对应的枚举name
     * @param enumClazz
     * @param code
     * @param <T>
     * @return
     */
    public static <T> String findName(Class<T> enumClazz, Integer code) {
        T enumItem = findEnum(enumClazz, code);
        if (enumItem == null) { return ""; }
        try {
            Method getName = enumItem.getClass().getMethod("getName");
            return (String) getName.invoke(enumItem,null);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
}